#pragma once

//////////////////////////////////////////////////////////////////////////
// Includes

extern "C"
{
#include <ntddk.h>
};

#include "CancelSafeQueue.h"

#include "Public.h"
//////////////////////////////////////////////////////////////////////////
///Types
/*typedef struct _PIRP_LIST
{
	LIST_ENTRY ListHead;
	KSPIN_LOCK ListLock;
} IRP_LIST, *PIRP_LIST;*/

//////////////////////////////////////////////////////////////////////////
// Driver functions

VOID DriverUnload(__in PDRIVER_OBJECT pDriverObject);

NTSTATUS DispatchCreate(
						__in PDEVICE_OBJECT pDevice,
						__in PIRP pIrp
						);

NTSTATUS DispatchClose(
					   __in PDEVICE_OBJECT pDevice,
					   __in PIRP pIrp
					   );

NTSTATUS DispatchDeviceControl(
							   __in PDEVICE_OBJECT pDevice,
							   __in PIRP pIrp
							   );

VOID Cancel(
			__in PDEVICE_OBJECT DeviceObject,
			__in PIRP Irp
			);
